from django.db import models  # 导入Django的数据库模型模块
from shop.models import Product  # 从shop应用中导入Product模型


class Order(models.Model):

    # 订单模型
    first_name = models.CharField(max_length=50)  # 订单中的姓，最大长度为50
    last_name = models.CharField(max_length=50)  # 订单中的名，最大长度为50
    email = models.EmailField()  # 订单中的电子邮件地址
    address = models.CharField(max_length=250)  # 订单中的地址，最大长度为250
    postal_code = models.CharField(max_length=20)  # 订单中的邮政编码，最大长度为20
    city = models.CharField(max_length=100)  # 订单中的城市，最大长度为100
    created = models.DateTimeField(auto_now_add=True)  # 订单创建时间，自动设置为当前时间
    updated = models.DateTimeField(auto_now=True)  # 订单更新时间，自动更新为当前时间
    paid = models.BooleanField(default=False)  # 订单是否已支付，默认为False

    class Meta:
        ordering = ('-created',)  # 设置默认排序为创建时间的倒序

    def __str__(self):
        # 返回订单的字符串表示，格式为"Order {订单ID}"
        return 'Order {}'.format(self.id)

    def get_total_cost(self):
        # 计算订单的总成本，即所有订单项的成本之和
        return sum(item.get_cost() for item in self.items.all())

    # noinspection PyMethodMayBeStatic
    def display_link(self):
        # 此方法可能被标记为可能是不必要的静态方法，但此处未实现具体功能
        return


class OrderItem(models.Model):

    # 订单项模型
    order = models.ForeignKey(Order, related_name='items',on_delete=models.CASCADE)  # 外键关联到Order模型，相关名为items，级联删除
    product = models.ForeignKey(Product, related_name='order_items',on_delete=models.CASCADE)  # 外键关联到Product模型，相关名为order_items，级联删除
    price = models.DecimalField(max_digits=10, decimal_places=2)  # 订单项的价格，最多10位数字，其中2位小数
    quantity = models.PositiveIntegerField(default=1)  # 订单项的数量，默认为1

    def __str__(self):
        # 返回订单项的字符串表示，格式为"{订单项ID}"
        return '{}'.format(self.id)

    def get_cost(self):
        # 计算订单项的成本，即价格乘以数量
        return self.price * self.quantity
